/**
 * 
 */
package fbv.distribuidora.sistema.delegate;

import java.util.Collection;
import java.util.Map;

import fbv.commun.dataTools.servico.ObjetoVO;
import fbv.commun.excecoes.FBVException;
import fbv.distribuidora.cliente.negocio.ClienteDAO;
import fbv.distribuidora.cliente.negocio.ControladorClienteImpl;
import fbv.distribuidora.cliente.servico.Cliente;
import fbv.distribuidora.cliente.servico.ControladorCliente;
import fbv.distribuidora.fornecedor.negocio.ControladorFornecedorImpl;
import fbv.distribuidora.fornecedor.servico.ControladorFornecedor;
import fbv.distribuidora.pedido.negocio.ControladorPedidoImpl;
import fbv.distribuidora.pedido.servico.ControladorPedido;
import fbv.distribuidora.produto.negocio.ControladorProdutoImpl;
import fbv.distribuidora.produto.servico.ControladorProduto;
import fbv.distribuidora.sistema.servico.Sistema;


/**
 * @author Max Santu
 *
 */
public class SistemaDelegate implements Sistema{

	/**
	 * 
	 */
	private SistemaDelegate() {
		// TODO Auto-generated constructor stub
	}

	public static Sistema getInstancia() {
		return new SistemaDelegate();
	}

/////////////////////__Cliente__\\\\\\\\\\\\\\\\\\\\\\\\\

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#cadastrarCliente(java.util.Map)
	 */
	public Integer cadastrarCliente(Map<String, String> campos) throws FBVException {
		return getControladorCliente().inserir(campos);
	}

	private ControladorCliente getControladorCliente() {
		return ControladorClienteImpl.getInstancia();
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarCliente(java.lang.String)
	 */
	public ObjetoVO consultarCliente(String idCliente) throws FBVException{
		return getControladorCliente().selecionar(idCliente);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#excluirCliente(java.lang.Integer)
	 */
	public void excluirCliente(Integer idCliente) throws FBVException{
		getControladorCliente().excluir(idCliente);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#alterarCliente(java.util.Map)
	 */
	public void alterarCliente(Map<String, String> campos) throws FBVException{
		getControladorCliente().alterar(campos);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarTodosClientes()
	 */
	public Collection<ObjetoVO> consultarTodosClientes() throws FBVException{
		return getControladorCliente().selecionarTodos();
	}

/////////////////////__Fornecedor__\\\\\\\\\\\\\\\\\\\\\\\\\

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#cadastrarFornecedor(java.util.Map)
	 */
	public Integer cadastrarFornecedor(Map<String, String> campos) throws FBVException {
		return getControladorFornecedor().inserir(campos);
	}

	private ControladorFornecedor getControladorFornecedor() {
		return ControladorFornecedorImpl.getInstancia();
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarFornecedor(java.lang.String)
	 */
	public ObjetoVO consultarFornecedor(String idFornecedor) throws FBVException {
		return getControladorFornecedor().selecionar(idFornecedor);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#excluirFornecedor(java.lang.Integer)
	 */
	public void excluirFornecedor(Integer idFornecedor) throws FBVException{
		getControladorFornecedor().excluir(idFornecedor);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#alterarFornecedor(java.util.Map)
	 */
	public void alterarFornecedor(Map<String, String> campos) throws FBVException{
		getControladorFornecedor().alterar(campos);
	}
	
	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarTodosFornecedores()
	 */
	public Collection<ObjetoVO> consultarTodosFornecedores() throws FBVException {
		return getControladorFornecedor().selecionarTodos();
	}

/////////////////////__Pedido__\\\\\\\\\\\\\\\\\\\\\\\\\

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#cadastrarPedido(java.util.Map)
	 */
	public Integer cadastrarPedido(Map<String, String> campos) throws FBVException {
		return getControladorPedido().inserir(campos);
	}

	private ControladorPedido getControladorPedido() {
		return ControladorPedidoImpl.getInstancia();
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarPedido(java.lang.String)
	 */
	public ObjetoVO consultarPedido(String idPedido) throws FBVException {
		return getControladorPedido().selecionar(idPedido);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#excluirPedido(java.lang.Integer)
	 */
	public void excluirPedido(Integer idPedido) throws FBVException {
		getControladorPedido().excluir(idPedido);		
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#alterarPedido(java.util.Map)
	 */
	public void alterarPedido(Map<String, String> campos) throws FBVException {
		getControladorPedido().alterar(campos);		
	}	
	
	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarTodosPedidos()
	 */
	public Collection<ObjetoVO> consultarTodosPedidos() throws FBVException {
		return getControladorPedido().selecionarTodos();
	}

/////////////////////__Produto__\\\\\\\\\\\\\\\\\\\\\\\\\

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#cadastrarProduto(java.util.Map)
	 */
	public Integer cadastrarProduto(Map<String, String> campos) throws FBVException {
		return getControladorProduto().inserir(campos);
	}

	private ControladorProduto getControladorProduto() {
		return ControladorProdutoImpl.getInstancia();
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarProduto(java.lang.String)
	 */
	public ObjetoVO consultarProduto(String idProduto) throws FBVException {
		return getControladorProduto().selecionar(idProduto);
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#excluirProduto(java.lang.Integer)
	 */
	public void excluirProduto(Integer idProduto) throws FBVException {
		getControladorProduto().excluir(idProduto);		
	}

	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#alterarProduto(java.util.Map)
	 */
	public void alterarProduto(Map<String, String> campos) throws FBVException {
		getControladorProduto().alterar(campos);		
	}
	
	/* (non-Javadoc)
	 * @see fbv.distribuidora.sistema.delegate.Sistema#consultarTodosProdutos()
	 */
	public Collection<ObjetoVO> consultarTodosProdutos() throws FBVException {
		return getControladorProduto().selecionarTodos();
	}

/////////////////////__login__\\\\\\\\\\\\\\\\\\\\\\\\\

	public boolean usuarioIsValido(String usuario, String senha) throws FBVException {
		//TODO [lenildo] login[ClienteDAO]
		return ClienteDAO.getInstancia().validarLoginUsuario(usuario, senha);
	}
	
	public ObjetoVO clienteIsValido(String usuario, String senha) throws FBVException {

		return getControladorCliente().clienteIsValido(usuario, senha);
	}
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Thread thread =  new Thread();

		try {

			for (int i = 0; i < 2; i++) {
				Collection collection = SistemaDelegate.getInstancia().consultarTodosClientes();

				for(Cliente cliente : (Collection<Cliente>)collection){
					System.out.println("<option value='"+cliente.getId()+"'>");
					System.out.println(cliente.getRazaoSocial());
					System.out.println("</option>");									
				}
				try {
					thread.sleep(10000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		} catch (FBVException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}
}